-- HAPPEN_DODGE

-- 计算是否发生闪避
return function(source, target, rand)
     -- 如果有必中属性
    local prop = PropM.combine(source, "true_strike", 1);
    if PropM.apply(prop, 1) > 0 then
        return false;
    end

    -- 如果有必闪属性
    prop = PropM.combine(target, "true_dodge", 1);
    if source:queryAttrib("attack") < PropM.apply(prop, 1) then
        return true;
    end

    -- TODO: 需要source命中 - target闪避来计算概率
    local accuracy = source:getAccuracy();
    local dodge = target:getDodge();

    -- 召唤兽忽视敌人闪避
    if source.type == OBJECT_TYPE_SUMMON then
        -- 忽视闪避属性
        prop = PropM.combine(source, "summon_ignore_dodge", 1);
        dodge = PropM.apply(prop, dodge);
    end

    local hitRatio = accuracy - dodge;   -- 命中的概率
    rand = rand % 100;

    if target.type == OBJECT_TYPE_MONSTER then
        local dungeonId = DungeonM.getDungeonId();
        local dungeons  = {11, 12, 13};
        -- 是蝙蝠，且在小关里
        if target:query("base_class_id") == 6 and table.indexOf(dungeons,dungeonId)>=0  then
            if rand >= hitRatio then
                -- 如果闪避了3次，不再闪避
                local dodgeTimes = target.dbase:query("dodge_times");

                if dodgeTimes ~= nil then
                    if dodgeTimes >= 3 then
                        return false;
                    else
                        dodgeTimes = dodgeTimes + 1;
                    end
                else
                    dodgeTimes = 1;
                end
                -- 未满3次时，记录闪避次数
                target.dbase:set("dodge_times",dodgeTimes);
                return true;
            else
                return false;
            end
        end
    end

    -- 是否闪避（不命中）
    return rand >= hitRatio;
end